Multicasting of video streams has been proposed in order to eliminate duplicate streams flowing through common links in a network. In a typical implementation, multiple multicast streams are started for each video—either streams for the entire video started some time apart, or one stream for a segment of the video—and are cycled over time. Multicasting streams this way scales with the number of individual streams started and is independent of the number of individual users. Multicasting, while effective for streaming live content, comes with complications in the video on demand (VOD) arena. Users may request content at times other than when a multicast stream starts, or may attempt to rewind or fast-forward the video. Thus, multicasting has to be augmented with other approaches before it can be applied to VOD. One popular approach is to unicast streams from the server until the point when the user can be transitioned over to a multicast stream.
Content distribution networks (CDNs) have also been proposed for facilitating distribution of VOD content. Because CDNs are normally located at the edge of the network close to the user, starting unicast streams from these CDNs distributes the load among the servers and bypasses potential points of congestion in the core of the network. The CDN can cache content the first time it is requested and can then use this cached data to serve future requests. Further, CDNs can be arranged as hierarchies such that they do not have to store all possible content; instead, they can cooperatively cache the content and use other mechanisms to locate and share necessary content.
Techniques that leverage the existence of data on the end hosts (peers) have also been suggested for VOD. End hosts participate actively in the system by storing video and by streaming video to other users, thereby alleviating load on the servers. Using these peers for streaming allows for many different combinations of approaches to be applied to address the scalability issues of Internet-based VOD. P2Cast constructs application level multicast trees rooted at the central video servers and comprised of the clients. In an application level multicast tree, the end hosts are organize into a tree so that the VOD server may unicast the VOD content to a parent end host which provides a unicast of the VOD content to a child end host. Video is streamed over the multicast tree to the clients, and clients that arrive late also join the multicast tree. However, the initial part of the stream that was missed may need to be patched, and this can be done by contacting the server or by using the other clients that have cached the initial part of the video. The use of application layer multicast naturally degenerates into a unicast when there is only one viewer watching a particular video (as can be expected with unpopular videos) and no special handling for unpopular videos is necessary.
Alternately, a swarming-based approach is possible where the system relies entirely on peers for the video and utilizes the central server as a directory that maps the data to the peer storing the data. Such an approach has been proposed that arranges the peers in a mesh topology and utilizes a central server that acts as a directory.
The use of the same reference symbols in different drawings indicates similar or identical items.